package ejb;

import java.util.HashMap;
import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import org.apache.log4j.Level;
import org.apache.log4j.Logger;

import util.XMLWriter;
import bean.PendienteFabricacion;
import bean.SolicitudFabricacion;
import bean.SolicitudFabricacion.EstadoFabricacion;
import ejbInterfaces.AdministradorSolFabBeanLocal;

/**
 * Session Bean implementation class AdministradorSolFabBean
 */
@Stateless
public class AdministradorSolFabBean implements AdministradorSolFabBeanLocal {

	/**
	 * Default constructor.
	 */
	@PersistenceContext(unitName = "MyDatabase")
	EntityManager em;
	static Logger logger = Logger.getLogger(AdministradorSolFabBean.class);

	public AdministradorSolFabBean() {

	}

	public List<PendienteFabricacion> obtenerArticulosPendientesFabricacion() {
		List<PendienteFabricacion> result = null;
		try {
			Query query = em
					.createQuery("from PendienteFabricacion where cantPendiente > 0");
			result = query.getResultList();

			// Duplico las cantidades a mostrar
			for (PendienteFabricacion p : result) {
				p.setCantPendiente(p.getCantPendiente() * 2);
			}
		} catch (Exception e) {
			logger.log(Level.ERROR, "Error obteniendo articulos pendientes desde Fabricacion", e );
			e.printStackTrace();
		}
		return result;
	}

	public void generarSolFabr(List<PendienteFabricacion> listaFabricacion) {

		try {
			if (listaFabricacion != null && !listaFabricacion.isEmpty()) {
				// Supongo que soy centro 11
				// supongo que va a fabrica 1
				int idCentro = 3;
				int idFab = 1;

				// numero de grupo + incremental
				Query query = em.createQuery("from SolicitudFabricacion");
				int cantSolFab = query.getResultList().size();
				String num = "03" + String.valueOf(cantSolFab);
				int numSolFab = Integer.valueOf(num);

				XMLWriter.getInstance().writeSolFabr(listaFabricacion,idCentro, idFab, numSolFab);

				// pongo en cero las cant. ya que mando todo lo que necesito
				for (PendienteFabricacion p : listaFabricacion) {
					p.setCantPendiente(0);
					em.merge(p);
				}

				SolicitudFabricacion solicitudFabricacion = new SolicitudFabricacion();

				solicitudFabricacion.setIdFabrica(idFab);
				solicitudFabricacion.setNumSolFab(numSolFab);
				// agrego los articulos
				HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
				for (PendienteFabricacion p : listaFabricacion) {
					map.put(p.getReferencia(), p.getCantPendiente());
				}
				solicitudFabricacion.setMapArtPendientes(map);
				solicitudFabricacion.setEstado(EstadoFabricacion.ENVIADO);
				em.persist(solicitudFabricacion);

			}

		} catch (Exception e) {
			logger.log(Level.ERROR, "Error generando solicitud de fabricacion", e );
			e.printStackTrace();
		}

	}

}
